package pe.edu.upc.e41a.javasoft.dao;

import java.util.List;
import java.util.Set;


import javax.persistence.TypedQuery;

import pe.edu.upc.e41a.javasoft.domain.Categoria;
import pe.edu.upc.e41a.javasoft.domain.Publicacion;

public interface CategoriaDao {

	// Métodos persistentes
	public void saveCategoria(Categoria categoria);

	public void updateCategoria(Categoria categoria);

	public void deleteCategoria(Categoria categoria);

	// Finders comunes
	public long countCategorias();

	public List<Categoria> findAllCategorias();

	public Categoria findCategoria(Integer codigo);

	public List<Categoria> findCategoriaEntries(int firstResult, int maxResults);

	// Finder avanzados
	public TypedQuery<Categoria> findCategoriasByCategorias(
			Set<Categoria> categorias);

	public TypedQuery<Categoria> findCategoriasByDescripcionEquals(
			String descripcion);

	public TypedQuery<Categoria> findCategoriasByDescripcionIsNotNull();

	public TypedQuery<Categoria> findCategoriasByDescripcionIsNull();

	public TypedQuery<Categoria> findCategoriasByDescripcionLike(
			String descripcion);

	public TypedQuery<Categoria> findCategoriasByDescripcionNotEquals(
			String descripcion);

	public TypedQuery<Categoria> findCategoriasByNombreEquals(String nombre);

	public TypedQuery<Categoria> findCategoriasByNombreIsNotNull();

	public TypedQuery<Categoria> findCategoriasByNombreIsNull();

	public TypedQuery<Categoria> findCategoriasByNombreLike(String nombre);

	public TypedQuery<Categoria> findCategoriasByNombreNotEquals(String nombre);

	public TypedQuery<Categoria> findCategoriasByPadre(Categoria padre);

	public TypedQuery<Categoria> findCategoriasByPublicacions(
			Set<Publicacion> publicacions);

}
